<#
.SYNOPSIS
    列出某目录中占用空间最大的前 x 个文件。

.DESCRIPTION
    递归扫描指定目录，按文件大小降序排序，输出前 x 个文件的
    完整路径及易读的大小信息（KB/MB/GB 等）。

.PARAMETER Path
    要扫描的目录路径。默认为当前目录(.)。
#>

param(
    [Parameter(Position = 0)]
    [string]$Path = ".",
    [Parameter(Position = 1)]
    [int]$Count = 10
)

# 确保路径存在
if (-not (Test-Path -LiteralPath $Path)) {
    Write-Error "路径不存在：$Path"
    exit 1
}

# 递归获取所有文件 → 按大小降序 → 取前 10 → 格式化输出
Get-ChildItem -LiteralPath $Path `
              -Recurse `
              -File `
              -ErrorAction SilentlyContinue |
    Sort-Object Length -Descending |
    Select-Object -First $Count `
                  @{Name="Size"; Expression={
                      $size = $_.Length
                      switch ($true) {
                          { $size -ge 1TB } { "{0:N2} TB" -f ($size / 1TB); break }
                          { $size -ge 1GB } { "{0:N2} GB" -f ($size / 1GB); break }
                          { $size -ge 1MB } { "{0:N2} MB" -f ($size / 1MB); break }
                          { $size -ge 1KB } { "{0:N2} KB" -f ($size / 1KB); break }
                          default { "$size B" }
                      }
                  }},
                  @{Name="FullName"; Expression={ $_.FullName }} |
    Format-Table -AutoSize